/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Berekenen;

/**
 *
 * @author Memet
 */
public class Tclaml {

    /**
     * Berekend de longitudinale stijfheid van het lamel
     * @param vf volumefractie van de vezel (ligt tussen 0 en 1)
     * @param ef stijfheid van de vezel (Pa)
     * @param em stijfheid van het epoxy (Pa)
     * @return El Longitudinale stijfheid van het lamel (Pa)
     */
    public static double El(double vf, double ef, double em)
    {
       return vf * ef + Vm(vf) * em;
    }

    /**
     * Berekend de volumefractie van de epoxy (ligt tussen 0 en 1)
     * @param vf volumefractie van de vezel (ligt tussen 0 en 1)
     * @return Vm volumefractie van de epoxy (ligt tussen 0 en 1)
     */
    public static double Vm(double vf)
    {
        return 1-vf;
    }

    /**
     * Berekend de transversale stijfheid van het lamel op de manier van Halpin, Tsaj en Hahn
     * @param vf volumefractie van de vezel (ligt tussen 0 en 1)
     * @param mum Poissonverhouding van de epoxy
     * @param ef stijfheid van de vezel (Pa)
     * @param em stijfheid van de epoxy (Pa)
     * @param muf Poissonverhouding van de vezel
     * @return Et transverzale stijfheid van het lamel berekend op de manier van Halpin, Tsaj en Hahn (Pa)
     */
    public static double EtHTH(double vf, double mum, double ef, double em, double muf)
    {
        double gtt = Gtt(vf,Vm(vf),Ntt(mum,Gm(em,mum),Gf(ef,muf)),Gf(ef,muf),Gm(em,mum));
        ///////
        double gm = Gm(em,mum);
        double kf = Kf(ef,muf);
        double vm = Vm(vf);
        double km = Km(em,mum);
        double nk = Nk(mum,gm,kf);
        ///////
        double k = K(vf,Nk(mum,Gm(em,mum),Kf(ef,muf)),Kf(ef,muf),Vm(vf),Km(em,mum));
        double mult = Mult(muf,mum,vf);
        double el = El(vf,ef,em);
        double out =  1/((1/(4*gtt)) + (1/(4*k)) + ((mult*mult)/el));
        return out;
    }

    /**
     * Berekend de transversale stijfheid van het lamel op de manier van Halpin en Tsaj
     * @param vf volumefractie van de vezel (ligt tussen 0 en 1)
     * @param ef stijfheid van de vezel (Pa)
     * @param em stijfheid van de epoxy (Pa)
     * @return Et transversale stijfheid van het lamel berekend op de manier van Halpin en Tsaj (Pa)
     */
    public static double EtHT(double vf, double ef, double em)
    {
        return em*((ef+2*(vf*ef+Vm(vf)*em))/(Vm(vf)*ef+vf*em+2*em));
    }

    /**
     * Berekend de longitudinale transversale poissonverhouding van het lamel
     * @param muf Poissonverhouding van de vezel
     * @param mum Poissonverhouding van de epoxy
     * @param vf Volumefractie van de vezel (ligt tussen 0 en 1)
     * @return Mult de longitudinale transversale Poissonverhouding van het lamel
     */
    public static double Mult(double muf, double mum, double vf)
    {
        return muf*vf + mum*Vm(vf);
    }

    /**
     * Berekend de glijdingsmodulus van de epoxy
     * @param em stijfheid van de epoxy (Pa)
     * @param mum Poissonverhouding van de epoxy
     * @return Gm Glijdingsmodulus van de epoxy (Pa)
     */
    public static double Gm(double em, double mum)
    {
        return em/(2*(1+mum));
//        Gm=Em/(2*(1+Mum)) ; %[Pa]
    }

    /**
     * Berekend de glijdingsmodulus van de vezel
     * @param ef stijfheid van de vezel (Pa)
     * @param muf Poissonverhouding van de vezel
     * @return Gf Glijdingsmodulus van de vezel (Pa)
     */
    public static double Gf(double ef, double muf)
    {
        return ef/(2*(1+muf));
    }

    /**
     * Berekend de longitudinale transversale Afschuif-koppelcoëfficient van het lamel
     * @param gm Glijdingsmodulus van de epoxy (Pa)
     * @param gf Glijdingsmodulus van de vezel (Pa)
     * @return Nlt longitudinale transversale Afschuif-koppelcoëfficient van het lamel
     */
    public static double Nlt(double gm, double gf)
    {
        return 0.5*(1+(gm/gf));
    }

    /**
     * Berekend de compressiemodulus van de vezel
     * @param ef stijfheid van de vezel (Pa)
     * @param muf Poissonverhouding van de vezel
     * @return Kf Compressiemodulus van de vezel (Pa)
     */
    public static double Kf(double ef, double muf)
    {
        return ef/(3*(1-2*muf));
    }

    /**
     * Berekend de compressiemodulus van de epoxy
     * @param em stijfheid van de epoxy (Pa)
     * @param mum Poissonverhouding van de epoxy
     * @return Km Compressiemodulus van de epoxy (Pa)
     */
    public static double Km(double em, double mum)
    {
        //km = Em/(3*(1-2*Mum)) ; % [Pa]

        double test1 = 1-2*mum;
        double test2 = 3*test1;
        double test3 = em/test2;
        return test3;
    }

    /**
     * Berekend de Afschuif-koppelcoëfficient k
     * @param mum Poissonverhouding van de epoxy
     * @param gm Glijdingsmodulus van de epoxy (Pa)
     * @param kf Compressiemodulus van de vezel (Pa)
     * @return Nk Afschuif-koppelcoëfficient k
     */
    public static double Nk(double mum, double gm, double kf)
    {
        return (1/(2*(1-mum))) * (1+(gm/kf));
    }

    /**
     * Berekend de compressiemodulus van het lamel
     * @param vf Volumefractie van de vezel (ligt tussen 0 en 1)
     * @param nk Afschuif-koppelcoëfficient k
     * @param kf Compressiemodulus van de vezel (Pa)
     * @param vm volumefractie van de epoxy (ligt tussen 0 en 1)
     * @param km Compressiemodulus van de epoxy (Pa)
     * @return K Compressiemodulus van het lamel (Pa)
     */
    public static double K(double vf, double nk, double kf, double vm, double km)
    {
        return 1/((vf/(vf + nk*vm))*(1/kf) + ((nk*vm)/(vf+nk*vm))*(1/km));
    }

    //Nk = (1/(2*(1-Mum))) * (1+(Gm/kf)) ; % [-]
//% dan k, voor lamel:
//k = 1/((vf/(vf + Nk*vm))*(1/kf) + ((Nk*vm)/(vf+Nk*vm))*(1/km)) ; % [Pa]


    /**
     * Berekend de transversale afschuif-koppelcoëfficient
     * @param mum Poissonverhouding van de epoxy
     * @param gm Glijdingsmodulus van de epoxy (Pa)
     * @param gf Glijdingsmodulus van de vezel (Pa)
     * @return Ntt Transversale afschuif-koppelcoëfficient
     */
    public static double Ntt(double mum, double gm, double gf)
    {
        return (1/(4*(1-mum)))*(3-4*mum+(gm/gf));
    }

    /**
     * Berekend de transversale glijdingsmodulus van het lamel
     * @param vf Volumefractie van de vezel (ligt tussen 0 en 1)
     * @param vm volumefractie van de epoxy (ligt tussen 0 en 1)
     * @param ntt Transversale afschuif-koppelcoëfficient
     * @param gf Glijdingsmodulus van de vezel (Pa)
     * @param gm Glijdingsmodulus van de epoxy (Pa)
     * @return Gtt Transversale glijdingsmodulus van het lamel (Pa)
     */
    public static double Gtt(double vf, double vm, double ntt, double gf, double gm)
    {
        return 1/((vf/(vf+ntt*vm))*(1/gf) + ((ntt*vm)/(vf+ntt*vm))*(1/gm));
    }

    /**
     * Berekend de longitudinale transversale glijdingsmodulus van het lamel
     * @param ef stijfheid van de vezel (Pa)
     * @param em stijfheid van de epoxy (Pa)
     * @param muf Poissonverhouding van de vezel
     * @param mum Poissonverhouding van de epoxy
     * @param vf Volumefractie van de vezel (ligt tussen 0 en 1)
     * @return Glt longitudinale transversale Glijdingsmodulus van het lamel (Pa)
     */
    public static double Glt(double ef, double em, double muf, double mum, double vf)
    {
        return 1/((vf/(vf+Nlt(Gm(em,mum),Gf(ef,muf))*Vm(vf)))*(1/Gf(ef,muf)) + ((Nlt(Gm(em,mum),Gf(ef,muf))*Vm(vf))/(vf+Nlt(Gm(em,mum),Gf(ef,muf))*Vm(vf)))*(1/Gm(em,mum)));
    }

    /**
     * Berekend de dichtheid van het lamel
     * @param rhof Dichtheid van de vezel (kg/m^3)
     * @param rhom Dichtheid van de epoxy (kg/m^3)
     * @param vf Volumefractie van de vezel (ligt tussen 0 en 1)
     * @return Dichtheid van het lamel (kg/m^3)
     */
    public static double Rhol(double rhof, double rhom, double vf)
    {
        return rhof*vf+rhom*(1-vf);
    }

    /**
     * Berekend de transversale longitudinale Poissonverhouding van het lamel
     * @param mult longitudinale transversale Poissonverhouding van het lamel
     * @param el Longitudinale stijfheid van het lamel (Pa)
     * @param et Transversale stijfheid van het lamel (Pa)
     * @return Mutl Transversale longitudinale Poissonverhouding van het lamel
     */
    public static double Mutl(double mult, double el, double et)
    {
        return (mult/el)*et;
    }

    public static double Al(double ef, double af, double vf, double em, double am)
    {
        double vm = Vm(vf);
        double al = ((ef*af*vf)+(em*am*vm))/((ef*vf)+(em*vm));
        return al;
    }

    public static double At(double num, double am, double vf, double nuf, double af, double ef, double em)
    {
        double al = Al(ef, af, vf, em, am);
        double nult = Mult(nuf, num, vf);
        double vm = Vm(vf);
        double at = ((1+num)*am*vm)+((1+nuf)*af*vf)-(al*nult);
        return at;
    }


}
